/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * panelPrincipal.java
 *
 * Created on 10/09/2011, 15:55:00
 */
package tsb.UI.PanelArrastrar;

import java.awt.*;
import java.util.LinkedList;

import java.awt.Toolkit;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JScrollPane;
import tsb.UI.PopupMenus.PopupMenuConecciones;
import tsb.UI.Ventanas.Principal;
import tsb.dominio.dispositivos.hosfinal.PC;
import tsb.dominio.excepciones.MACException;
import tsb.reproductor.Reproductor;
import tsb.UI.arbol.panelArbolo;

public class PanelPrincipalV2 extends javax.swing.JPanel {

//    Reproductor r = new Reproductor();
    public static final int cursorPredeterminado=1;
    public static final int cursorMovimiento=2;
    public static final int cursorCruz=3;
    public static final int cursorMano=4;
    public static final int cursorEsperar=5;
    public static final int cursorPC=6;
    public static final int cursorSwicht=7;
    public static final int cursorRouter=8;
    public static final int cursorEliminar=9;
    public static final int cursorServer=10;
    public static final int cursorModem=11;
    
    public static final int agregarPC=1;
    public static final int agregarRouter=2;
    public static final int agregarSwitch=3;
    public static final int agregarServer=4;
    public static final int agregarModem=5;
    
    private int agregarDispositivo=0; // para saber que tipo de dispositivo se esta agregando
    
    private boolean seEstaArratrando= false; //para saber si se esta arrastrando un dispositivo
    private boolean seEstaConectando=false; //para saber si se esta conectando
    private boolean seEstaEliminando=false;
    
    private LineaConexion ConexionActual;
    private LinkedList<LineaConexion> coneccionesActuales = new LinkedList<LineaConexion>();
    private Graphics gc;
    private Point ini, fin;
    
   
    private LinkedList<LineaConexion> listaConexiones = new LinkedList<LineaConexion>(); // contiene todas las conecciones del diagrama
    
     private Dimension area; 
     
     private tsb.UI.Ventanas.Principal ventanaPrincipal;
     private tsb.gestores.GestorDeDispositivos gestorDisp;
     private tsb.gestores.GestorGrafo gestorGra;
     
     private int tipoDeconeccion; //para saber que tipo de coneccion se esta realizando

    
    public PanelPrincipalV2(tsb.UI.Ventanas.Principal prin,tsb.gestores.GestorGrafo gestorGra,tsb.gestores.GestorDeDispositivos gestorDisp)
    {
        
        this.ventanaPrincipal=prin;
        this.gestorGra=gestorGra;
        this.gestorDisp=gestorDisp;

        ini = new Point(1,1);
        fin=ini;
        
        area = new Dimension(0,0);
        initComponents();
        
            area.width=100;
            area.height=100;
            this.setPreferredSize(area);
            //this.revalidate();
        
    }

    //*- Metodos para poder acceder al gestor del grafo--
    public void setGestorGrafo(tsb.gestores.GestorGrafo gestor)
    {
        this.gestorGra=gestor;
    }
    public tsb.gestores.GestorGrafo getGestorGrafo()
    {
        return gestorGra;
    }
    //*-----------------------
       public tsb.gestores.GestorDeDispositivos getGestorDispositivos()
    {
        return gestorDisp;
    }
    
    
    public boolean isArratrarDispositivo()
    {
        return seEstaArratrando;
    }

    public void setArratrarDispositivo(boolean arratrarDispositivo) {
        this.seEstaArratrando = arratrarDispositivo;
    }

    public boolean getSeEstaConectando() {
        return seEstaConectando;
    }

    public void setSeEstaConectando(boolean conexion) {
        this.seEstaConectando = conexion;
    }

    public LineaConexion getConexionActual() {
        return ConexionActual;
    }

    public void setConexionActual(LineaConexion ConexionActual) {
        this.ConexionActual = ConexionActual;
    }
    
    public void addConexion(LineaConexion c)
    {
        this.listaConexiones.add(c);
    }

    public boolean getSeEstaEliminando() {
        return seEstaEliminando;
    }

    public int getTipoDeconeccion() {
        return tipoDeconeccion;
    }

    public void setTipoDeconeccion(int tipoDeconeccion) {
        this.tipoDeconeccion = tipoDeconeccion;
    }
    
    

    public void setSeEstaEliminando(boolean seEstaEliminando) {
        this.seEstaEliminando = seEstaEliminando;
        
        
            java.awt.Component  comps[]= this.getComponents();

            for(int i=0;i<comps.length;i++)
            {
                 BotonPersonalizado c = (BotonPersonalizado) comps[i];
                 
                 
                     if(c.getName().compareTo("botonArrastrable")==0)
                     {
                         if(seEstaEliminando==true)
                         {
                             java.awt.Image imagenCruz= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/DeleteRed.png")); 
                             java.awt.Cursor cursorCruz = new java.awt.Cursor(1);
                             cursorCruz =Toolkit.getDefaultToolkit().createCustomCursor(imagenCruz, new java.awt.Point(1,1) , "pepe");
                             this.setCursor(cursorCruz);
                             c.setCursor(cursorCruz);
                         }
                         else
                         {
                             c.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
                         }
                     }
            }
    }

    public Dimension getArea() {
        return area;
    }

    public void setArea(Dimension area) {
        this.area = area;
    }
    
    public void removerConexion()
    {
        this.listaConexiones.remove(this.listaConexiones.getLast());
        this.repaint();
        
    }

    public LinkedList<LineaConexion> getListaConexiones() {
        return listaConexiones;
    }

    public void setListaConexiones(LinkedList<LineaConexion> listaConexiones) {
        this.listaConexiones = listaConexiones;
    }

    public Point getFin() {
        return fin;
    }

    public void setFin(Point fin) {
        this.fin = fin;
    }

    public Point getIni() {
        return ini;
    }

    public void setIni(Point ini) {
        this.ini = ini;
    }

    public Principal getVentanaPrincipal() {
        return ventanaPrincipal;
    }

    public void setVentanaPrincipal(Principal ventanaPrincipal) {
        this.ventanaPrincipal = ventanaPrincipal;
    }

    public int getAgregarDispositivo() {
        return agregarDispositivo;
    }

    public void setAgregarDispositivo(int agregarDispositivo) {
        this.agregarDispositivo = agregarDispositivo;
    }
    
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setBackground(new java.awt.Color(255, 255, 255));
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 523, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 438, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    
    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
        
        if(this.seEstaArratrando)
        {
            final int W = 140;
            final int H = 140;
            boolean changed = false;
            
            int xUbicacion = evt.getX() - W/2;
            int yUbicacion = evt.getY() - H/2;
            
            int xCentroBoton = evt.getX();
            int yCentroBoton = evt.getY();
            
            if (xUbicacion < 0)
            {
                xUbicacion = 10;
                xCentroBoton = 80;
            }
            
            if (yUbicacion < 0)
            {
                yUbicacion = 10;
                yCentroBoton = 80;
            }
            
            int this_width = (xUbicacion + W );
            if (this_width > area.width) {
                area.width = this_width; changed=true;
            }
 
            int this_height = (yUbicacion + H );
            if (this_height > area.height) {
                area.height = this_height; changed=true;
            }
            
            if (changed) {
            //Update client's preferred size because
            //the area taken up by the graphics has
            //gotten larger or smaller (if cleared).
            this.setPreferredSize(area);
 
            //Let the scroll pane know to update itself
            //and its scrollbars.
            this.revalidate();
            }
            
            //
            switch(this.agregarDispositivo)
            {
                case 0:
                    break;
                case 1:// PC
                    String nombrePC= tsb.UI.Ventanas.Principal.getNombreDispositivos(agregarDispositivo);
                    BotonPersonalizado botonPC = new BotonPersonalizado(nombrePC,BotonPersonalizado.PC, new Point(xCentroBoton-32,yCentroBoton-32));
                    botonPC.setPanelPrincipal(this);
                    //PopupMenuConecciones popupConecciones = new PopupMenuConecciones(botonPC, this.gestorDisp);
                    this.insertarBoton(botonPC,xUbicacion,yUbicacion);
                    this.ventanaPrincipal.getPanelArbolo().addDispositivosFinales(panelArbolo.PC, nombrePC);
                    gestorDisp.agregarDispositivo(1, xCentroBoton - 32, yCentroBoton - 32, nombrePC);
                    gestorGra.generarIPconDHCP();
                    break;
                    
                case 2://Router
                    String nombreRouter= tsb.UI.Ventanas.Principal.getNombreDispositivos(agregarDispositivo);
                    BotonPersonalizado botonRouter = new BotonPersonalizado(nombreRouter,BotonPersonalizado.ROUTER, new Point(xCentroBoton-25,yCentroBoton-25));
                    botonRouter.setPanelPrincipal(this);
                    this.insertarBoton(botonRouter,xUbicacion,yUbicacion);
                    this.ventanaPrincipal.getPanelArbolo().addDispositivoDeConeccion(panelArbolo.ROUTER,nombreRouter );
                    gestorDisp.agregarDispositivo(2, xCentroBoton-25, yCentroBoton-25, nombreRouter);
                    gestorGra.generarIPconDHCP();
                    break;
                case 3://Switch
                    String nombreSwitch= tsb.UI.Ventanas.Principal.getNombreDispositivos(agregarDispositivo);
                    BotonPersonalizado botonSwitch = new BotonPersonalizado(nombreSwitch,BotonPersonalizado.SWITCH, new Point(xCentroBoton-30,yCentroBoton-50));
                    botonSwitch.setPanelPrincipal(this);
                    this.insertarBoton(botonSwitch,xUbicacion,yUbicacion);
                    this.ventanaPrincipal.getPanelArbolo().addDispositivoDeConeccion(panelArbolo.SWITCH, nombreSwitch);
                    gestorDisp.agregarDispositivo(3, xCentroBoton-30, yCentroBoton-50, nombreSwitch);
                    break;
                case 4://Server
                    String nombreServer= tsb.UI.Ventanas.Principal.getNombreDispositivos(agregarDispositivo);
                    BotonPersonalizado botonServer = new BotonPersonalizado(nombreServer,BotonPersonalizado.SERVER, new Point(xCentroBoton-35,yCentroBoton-32));
                    botonServer.setPanelPrincipal(this);
                    this.insertarBoton(botonServer,xUbicacion,yUbicacion);
                    this.ventanaPrincipal.getPanelArbolo().addDispositivosFinales(panelArbolo.SERVER, nombreServer);
                    gestorDisp.agregarDispositivo(4, xCentroBoton-35, yCentroBoton-32, nombreServer);
                    gestorGra.generarIPconDHCP();
                    break;
                case 5://Modem
                    String nombreModem= tsb.UI.Ventanas.Principal.getNombreDispositivos(agregarDispositivo);
                    BotonPersonalizado botonModem = new BotonPersonalizado(nombreModem,BotonPersonalizado.MODEM, new Point(xCentroBoton-35,yCentroBoton-30));
                    botonModem.setPanelPrincipal(this);
                    this.insertarBoton(botonModem,xUbicacion,yUbicacion);
                    this.ventanaPrincipal.getPanelArbolo().addDispositivoDeConeccion(panelArbolo.MODEM, nombreModem);
                    gestorDisp.agregarDispositivo(5, xCentroBoton-35, yCentroBoton-30, nombreModem);
                    gestorGra.generarIPconDHCP();
                    break;
            
            }
            
            this.setCursor(PanelPrincipalV2.cursorPredeterminado);
            this.setArratrarDispositivo(false);
            
        try {
             // r.loadFile("C:\\Users\\Nico\\Desktop\\Efects\\Armas\\TiroConArco.mp3");
             // r.play();
            }
        catch (Exception ex)
            {
              Logger.getLogger(PanelPrincipalV2.class.getName()).log(Level.SEVERE, null, ex);
            }
            this.ventanaPrincipal.habilitarBotones();
            
            return;
                   
        }
        
        if(this.seEstaEliminando)
        {
             Line2D.Double linea1 = new Line2D.Double( evt.getX(),evt.getY(),evt.getX()+10,evt.getY()-10);
             
             Iterator iter = this.listaConexiones.iterator();
             while(iter.hasNext())
             {
                 LineaConexion c= (LineaConexion)iter.next();
                 Line2D.Double linea2 = new Line2D.Double( c.getIni().x,c.getIni().y,c.getFin().x,c.getFin().y);
                 
                  if(linea1.intersectsLine(linea2))
               {
                   this.borrarLineaConexion(c);
                   this.borrarConexion(c.getNombreAMostrar());
                   return;
                   
               }
             }
             return;
        }
            
    }//GEN-LAST:event_formMouseClicked
    public void agregarConexionAlGrafo(String origen, String destino, int tipoCon)
    {

        gestorGra.agregarConexion(origen, destino, tipoCon);
        gestorGra.generarIPconDHCP();

    }
    private void formMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseDragged

        
        //codigo para que se agrande el area de trabajo mientras se arrastra el mause
        //x -> Width
        //y -> Height
        if(evt.getX() > this.getWidth() )
        {
            if(evt.getX()>this.area.width)
            {
                this.area.width = this.area.width + (evt.getX()- this.area.width);
            }
            else
            {
                this.area.width = this.area.width - (evt.getX()- this.area.width);
            }
        }
        if(evt.getY() > this.getHeight() )
        {
          
            this.area.height = this.area.height + (evt.getY()- this.area.height);
        }
        
        this.setPreferredSize(area);
        this.revalidate();
        
        
    }//GEN-LAST:event_formMouseDragged

    private void formMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseMoved
        
        if(this.seEstaArratrando==false && this.seEstaConectando==false && this.seEstaEliminando==false)
        {
             Line2D.Double linea1 = new Line2D.Double( evt.getX(),evt.getY(),evt.getX()+10,evt.getY()-10);
             
             Iterator iter = this.listaConexiones.iterator();
             while(iter.hasNext())
             {
                 LineaConexion c= (LineaConexion)iter.next();
                 Line2D.Double linea2 = new Line2D.Double( c.getIni().x,c.getIni().y,c.getFin().x,c.getFin().y);
                 
                 if(linea1.intersectsLine(linea2))
                 {
                     this.setCursor(PanelPrincipalV2.cursorMano);
                 }
                 else
                 {
                      this.setCursor(PanelPrincipalV2.cursorPredeterminado);
                 }
                      
             }
             return;
        }
        
    }//GEN-LAST:event_formMouseMoved

    public void insertarBoton(BotonPersonalizado b,int x, int y)
    {
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
            this.setLayout(layout);
            layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(x, x, x)
                .addComponent(b)
                )
                    );
            
            layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                    .addGap(y, y, y)
                .addComponent(b)
                )
                    );
        updateUI();
    }
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables

public void setCursor(int tipoCursor)
{
    switch(tipoCursor)
    {
        case 1://cursor prederteminado
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
            break;
        case 2:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.MOVE_CURSOR));
            break;
        case 3:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
            break;
        case 4:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
            break;
        case 5:
            this.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
            break;
        case 6://cursor de imagen
            java.awt.Image imagen= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/PC_65x65.png")); 
            java.awt.Cursor a = new java.awt.Cursor(1);
            a =Toolkit.getDefaultToolkit().createCustomCursor(imagen, new java.awt.Point(1,1) , "pepe");
            this.setCursor(a);
            break;
        case 7://cursor de imagen
            java.awt.Image imagenSwitch= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/SWITCH_65x65.png")); 
            java.awt.Cursor cursorSwitch = new java.awt.Cursor(1);
            cursorSwitch =Toolkit.getDefaultToolkit().createCustomCursor(imagenSwitch, new java.awt.Point(1,1) , "pepe");
            this.setCursor(cursorSwitch);
            break;
        case 8://cursor de imagen
            java.awt.Image imagenRouter= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/ROUTER_65x65.png")); 
            java.awt.Cursor router = new java.awt.Cursor(1);
            router =Toolkit.getDefaultToolkit().createCustomCursor(imagenRouter, new java.awt.Point(1,1) , "pepe");
            this.setCursor(router);
            break;
        case 9://cursor eliminar
            java.awt.Image imagenEliminar= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/DeleteRed.png")); 
            java.awt.Cursor eliminar = new java.awt.Cursor(1);
            eliminar =Toolkit.getDefaultToolkit().createCustomCursor(imagenEliminar, new java.awt.Point(1,1) , "pepe");
            this.setCursor(eliminar);
            break;
        case 10://cursor de Imagen
            java.awt.Image imagenServer= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/SERVER_65x65.png"));
            java.awt.Cursor cursorServer = new java.awt.Cursor(1);
            cursorServer =Toolkit.getDefaultToolkit().createCustomCursor(imagenServer, new java.awt.Point(1,1) , "pepe");
            this.setCursor(cursorServer);
            break;
        case 11://cursor de Imagen
            java.awt.Image imagenModem= Toolkit.getDefaultToolkit().getImage(getClass().getResource("/tsb/UI/Imagenes/MODEM_65x65.png"));
            java.awt.Cursor cursorModem = new java.awt.Cursor(1);
            cursorModem =Toolkit.getDefaultToolkit().createCustomCursor(imagenModem, new java.awt.Point(1,1) , "pepe");
            this.setCursor(cursorModem);
            break;

            
    }
}


 @Override
    public void paintComponent(Graphics g){
     
        super.paintComponent(g);
        for (LineaConexion  figura : listaConexiones)
        {
            figura.dibujar(g);
        }
    }

    public Graphics getGc() {
        if(this.gc==null)
        {
            return gc=getGraphics();
        }
        else
        {
            return gc;
        }
        
        
    }
 
 
    public void empiezaDibujar(Point p,BotonPersonalizado bini){
        ConexionActual=new LineaConexion(this.tipoDeconeccion,p,null,bini);
        ini=p;
        fin=p;
        gc=getGraphics();
        gc.setXORMode(getBackground());
        ConexionActual.dibujar(gc, ini, fin);
    }

    public void dibuja(Point p){
        
        ConexionActual.dibujar(gc, ini, fin);
        fin=p;
        ConexionActual.dibujar(gc, ini, fin);
    }

    public void terminaDibujar(BotonPersonalizado bFin){
        ConexionActual.dibujar(gc, ini, fin);
        ConexionActual.setBotonFin(bFin);
        gc.setPaintMode();
        ConexionActual.dibujar(gc, ini, fin);
        gc.dispose();
        listaConexiones.add(ConexionActual);
        this.setSeEstaConectando(false);
    }
    
    public void empiezaDibujar2(LinkedList<LineaConexion> listaConexines){
        
        this.coneccionesActuales=listaConexines;
        gc=getGraphics();
        gc.setXORMode(getBackground());
    }

    public void dibuja2(Point mouse, Point ini)
    {
        Iterator iter= coneccionesActuales.iterator();
        while(iter.hasNext())
        {
            LineaConexion c= (LineaConexion)iter.next();
            
            if(ini.x==c.getIni().x && ini.y==c.getIni().y)
            {//Se mueve el punto de inicio
                c.dibujar(gc, c.getIni(), c.getFin());
                c.setIni(mouse);
                c.dibujar(gc, mouse, c.getFin());
            }
            else
            {
                c.dibujar(gc, c.getIni(), c.getFin());
                c.setFin(mouse);
                c.dibujar(gc, c.getIni(), mouse);
            }
            
        }
        this.repaint();
    }

    public void terminaDibujar2()
    {
        Iterator iter= coneccionesActuales.iterator();
        while(iter.hasNext())
        {
             LineaConexion c= (LineaConexion)iter.next();
             c.dibujar(gc, c.getIni(), c.getFin());
             gc.setPaintMode();
             c.dibujar(gc, c.getIni(), c.getFin()); 
        }
    }
    
    
    
    public void conexionActualNull()
    {
        this.ConexionActual=null;
        this.ini=null;
        this.fin=null;
        
    }
    
//    //**
    /*
     * Metodo para cambiar el color de una conexion cuando se mueve un boton
    */
    public void borrarLineaConexion(LineaConexion c)
    {
       
       (( Graphics2D )gc).clearRect(c.getIni().x,c.getIni().y,c.getFin().x,c.getFin().y);
       this.listaConexiones.remove(c);
       this.repaint();
       
//       this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeFinal(botonAEliminar.getText());
        this.ventanaPrincipal.getPanelArbolo().removerConeccion(c.getNombreAMostrar());
        
//       
       
//        //para borrar una coneccion se la pinta de color blanco
//        //c=ConexionActual;
//        if(this.listaConexiones.contains(c))
//        {
//            Iterator iter =this.listaConexiones.listIterator();
//            while(iter.hasNext())
//            {
//                LineaConexion co=(LineaConexion)iter.next();
//                co.setColor(Color.WHITE);
//                
//            }
//        }
//        repaint();
//        
//       
//       // gc.clearRect(100, 100, 10, 10);
//       // this.repaint();
//        
////        ConexionActual=c;
////        ConexionActual.borrar(gc);
    }
    
    public BotonPersonalizado hayUnBoton(Point p)
    {
        java.awt.Component  comps[]= this.getComponents();

        for(int i=0;i<comps.length;i++)
        {
             BotonPersonalizado c = (BotonPersonalizado) comps[i];


             for(int j=0;j<200;j++)
             {
                 for(int k=0;k<200;k++)
                 {
                     if(p.getX()-j==c.getX() && p.getY()-k==c.getY())
                     {
                         return c;
                     }
                 }
             }
        }
        return null;
    }
    
//    public BotonPersonalizado devolverBoton(Point p)
//    {
//        java.awt.Component comps[]= this.getComponents();
//        
//        for(int i=0;i<comps.length;i++)
//        {
//             BotonPersonalizado c = (BotonPersonalizado) comps[i];
//
//
//             for(int j=0;j<200;j++)
//             {
//                 for(int k=0;k<200;k++)
//                 {
//                     if(p.getX()-j==c.getX() && p.getY()-k==c.getY())
//                     {
//                         return c;
//                     }
//                 }
//             }
//        }
//        return null;
//    }
    
    public void borrarConexion(String nombreAMostrar) {
        this.gestorDisp.borrarConexion(nombreAMostrar);
    }

    public void eliminarBoton(BotonPersonalizado botonAEliminar) {

        
        Iterator iter = botonAEliminar.getConexiones().iterator();
        
        while(iter.hasNext())
        {
            LineaConexion c= (LineaConexion)iter.next();
            this.borrarLineaConexion(c);
            this.borrarConexion(c.getNombreAMostrar());
        }
        
        switch(botonAEliminar.getTipoDispositivo())
        {
            case BotonPersonalizado.PC:
                this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeFinal(botonAEliminar.getText());
                break;
            case BotonPersonalizado.SERVER:
                this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeFinal(botonAEliminar.getText());
                break;
            case BotonPersonalizado.ROUTER:
                this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeConeccion(botonAEliminar.getText());
                break;
            case BotonPersonalizado.SWITCH:
                this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeConeccion(botonAEliminar.getText());
                break;
            case BotonPersonalizado.MODEM:
                this.ventanaPrincipal.getPanelArbolo().removerDispositivoDeConeccion(botonAEliminar.getText());
                break;
        }
        
        
        
        this.remove(botonAEliminar);
        
        
    }

    void borrarDispositivo(String text) {
        this.gestorDisp.borrarDispositivos(text);
    }
    
    
    
    public void dibujarLinea(LineaConexion linea)
    {
        
        
    }
    
    
}
